/**
 * Description:
 * Class Name:GetTest
 * Date:2022/5/28 16:26
 *
 * @author LTisme
 * @version JAVA17
 */
package 疯狂Java讲义.第17章_网络编程._17_6_Java11标准化的HTTPClient._17_6_1_发送同步GET请求;

import java.net.InetSocketAddress;
import java.net.ProxySelector;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;

public class GetTest {
    public static void main(String[] args) throws Exception{
        // ①创建 HTTPClient 对象
        HttpClient client = HttpClient.newBuilder()
                // 指定HTTP协议的版本
                .version(HttpClient.Version.HTTP_2)
                // 指定重定向策略
                .followRedirects(HttpClient.Redirect.NORMAL)
                // 指定超时的时长
                .connectTimeout(Duration.ofSeconds(20))
                // 如有必要，还可以通过下面的方法设置代理服务器
//                .proxy(ProxySelector.of(new InetSocketAddress("proxy.crazyit.com" , 80)))
                .build();

        // ②创建HttpRequest对象
        HttpRequest request = HttpRequest.newBuilder()
                // 执行请求的URL
                .uri(URI.create("http://www.baidu.com"))
                // 指定请求超时的时长
                .timeout(Duration.ofMinutes(2))
                // 指定请求头
                .header("Content-Type", "text/html")
                // 创建GET请求
                .GET()
                .build();

        // 指定将服务器响应转换成字符串
        HttpResponse.BodyHandler<String> bodyHandler = HttpResponse.BodyHandlers.ofString();
        // ③发送请求，并获得服务器的响应
        HttpResponse<String> response = client.send(request, bodyHandler);

        // 简单的解析数据
        System.out.println("响应的状态码：" + response.statusCode());
        System.out.println("响应头：" + response.headers());
        System.out.println("响应体：" + response.body());
    }
}
